﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Data.Objects;

namespace SCEM.DTO
{
    /// <summary>
    /// DTO de condições de venda.
    /// </summary>
    [DataContract]
    public class CondicaoVendaDTO : IDTO<CondicaoVenda>
    {
        public CondicaoVenda ConvertToEntity(ObjectContext context)
        {
            CondicaoVenda condicaoVenda = new CondicaoVenda();
            SCEMContainer scemContext = (SCEMContainer)context;
            Guid guidFornecedor;
            Guid guidProduto;

            if (!String.IsNullOrEmpty(FornecedorId) && !String.IsNullOrEmpty(ProdutoId) &&
                Guid.TryParse(FornecedorId, out guidFornecedor) && Guid.TryParse(ProdutoId, out guidProduto))
            {
                // Verificar se o DTO representa uma condição de venda que já está persistida no banco
                var queryCondicaoVenda = from c in scemContext.CondicoesVenda
                                         where c.FornecedorId == guidFornecedor && c.ProdutoId == guidProduto
                                         select c;

                if (queryCondicaoVenda.Count() == 1) // Utilizar entidade já existente no banco
                    condicaoVenda = queryCondicaoVenda.First();
                else
                {
                    // Nova condição de venda, buscar o fornecedor e o produto associados a ela no banco
                    var queryFornecedor = from f in scemContext.Fornecedores
                                          where f.Id == guidFornecedor
                                          select f;
                    if (queryFornecedor.Count() == 1) // Fornecedor encontrado
                        condicaoVenda.Fornecedor = queryFornecedor.First();

                    var queryProduto = from p in scemContext.Produtos
                                       where p.Id == guidProduto
                                       select p;
                    if (queryProduto.Count() == 1) // Produto encontrado
                        condicaoVenda.Produto = queryProduto.First();
                }
            }

            // DTO -> Entidade
            condicaoVenda.Preco = Preco;
            condicaoVenda.PrazoEntregaHoras = PrazoEntregaHoras;
            condicaoVenda.QuantidadeMinimaVenda = QuantidadeMinimaVenda;

            return condicaoVenda;
        }

        [DataMember]
        public string FornecedorId { get; set; }
        
        [DataMember]
        public string ProdutoId { get; set; }

        [DataMember]
        public decimal Preco { get; set; }

        [DataMember]
        public int PrazoEntregaHoras { get; set; }

        [DataMember]
        public int QuantidadeMinimaVenda { get; set; }
    }
}
